Technical Q&A QA1279
Remote or Two-Machine Debugging Applications with GDB


Q: GDB を使用してアプリケーションをデバッグしようとすると、デバッグ対象のコードの妨げとなってデバッグできません。どうしすればよいでしょうか。

A: 2 つのアプリケーション間でのドラッグ&ドロップ操作、複雑な有効化/無効化/更新の操作、画面全体をグラブするアプリケーションなどのデバッグを実行しようとすると、このような状況に陥る可能性があります(ここで挙げた例は、一部に過ぎません)。これらの状況において、GDB を表示するウインドウは(Project Builder 内であるか Terminal 内であるかを問わず)デバッグ対象のコードの妨げとなります。この問題のきわめて有効な解決方法は、コンピュータ 2 台編成でデバッグすることです。別名、リモートデバッグといいます。これは、Macintosh をもう 1 台用意して、2 台のコンピュータを同一のネットワークに接続するだけでできます。

ターゲットの Macintosh のデバッグは、制御側の Macintosh の Terminal アプリケーション内で GDB を使用して実行します。将来的には、制御側の Macintosh の Xcode 内で GDB を使用するほうが簡単かもしれませんが、目下のところ、それは現実的ではありません。

1) デバッグ対象の 1 つまたは複数のアプリケーションが入っているターゲットの Macintosh において、システム環境設定の「共有」パネルを使用して「リモートログイン」を有効にします。このサービスを有効にすると、接続に必要なコマンドライン情報を示すメッセージ(たとえば、「ssh yourname@yournetwork.com」と入力)が表示されます。



注:
ターゲットの Macintosh の IP アドレスが分かっている場合には、単純に「ssh xx.xx.xx.xx」を使用することもできます。



2) 制御側の Macintosh において、Terminal アプリケーションを起動し、デバッグ対象アプリケーションの数と同じ数だけウインドウを開きます(ドラッグ&ドロップのデバッグの場合には 2 つ、それ以外の場合には 1 つ)。

3) まず各ウインドウで、「共有」ペインで得たコマンドライン情報を入力して、ssh を使用してターゲットの Macintosh に接続します(ユーザ名に対応するパスワードの入力を求められます)。次に、GDB を起動し(起動されるのはターゲットコンピュータの GDB ツールです)、アプリケーションを実行するか、またはアプリケーションの pid にアタッチします(詳細については GDB のマニュアルを参照してください)。デバッグ対象アプリケーションのシンボルファイルを使用することもできます(この詳細についても、GDB のマニュアルを参照してください)



注:
ウインドウが 2 つあり、それぞれにおいて GDB を実行しているときは、同時に 2 つのウインドウを見られるように、それらのウインドウを重ならないように並べることをお勧めします。これにより、ブレークポイントによる割り込みや、アプリケーションからのメッセージがすぐ分かります。



4) デバッグが終了したら、GDB と Terminal を忘れずに終了します。また、もうデバッグの必要がなければ、ターゲットの Macintosh のリモートログインサービスを無効にします。


[2003 年 9 月 9 日]